package com.mycode.prototype05.resolve;

public class WeeklyLog implements Cloneable{

    private String name;

    private String date;

    private String content;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    /**
     * 对象克隆有两种克隆方式：浅克隆和深克隆 其主要的区别在于是否支持引用类型的成员变量的复制
     * 浅克隆：
     *     如果原型对象的成员变量是值类型，将复制一份给克隆对象；如果成员变量是引用类型，则将引用对象的地址复制一份给克隆对象，
     *     也就是说原型对象和克隆对象的成员变量指向相同的内存地址
     * 深克隆：
     *     无论原型对象的成员变量是值类型还是引用类型，都将复制一份给克隆对象，深克隆将原型对象的所有引用对象也复制一份给克隆对象。
     *     Java中，如果需要实现深克隆，可以通过序列化等方式实现。序列化就是将对象写到流的过程，写到流中的对象是原有对象的一个复制品，而原对象仍然存在内存中。
     *     序列化的复制不仅可以复制对象本身，而且可以复制其引用的成员变量，通过序列化将对象写到一个流中，再从流里将其读出来，可以实现深克隆。
     *     能够实现序列化的对象其类必须实现 Serializable 接口
     *
     * @return
     */
    @Override
    public WeeklyLog clone() {
        Object obj = null;
        try {
            obj = super.clone();
            return (WeeklyLog) obj;
        } catch (CloneNotSupportedException e) {
            System.out.println("不支持复制");
            return null;
        }
    }
}
